Skip to content

Gate aca_ptc on tax_unit_is_filer for non-filers#7753

Open
juaristi22 wants to merge 1 commit intoPolicyEngine:mainfrom
juaristi22:maria/issue-7748
Open

Gate aca_ptc on tax_unit_is_filer for non-filers#7753
juaristi22 wants to merge 1 commit intoPolicyEngine:mainfrom
juaristi22:maria/issue-7748

Conversation

@juaristi22
Copy link
Collaborator

Summary

  • Gates aca_ptc.formula_2024 on tax_unit_is_filer so non-filers correctly receive $0 PTC
  • Fixes ~5x overestimate in calibrated microsimulation datasets (non-filer tax units were computing PTC that was never constrained by IRS SOI calibration targets)
  • ACA PTC legally requires filing Form 8962 with a federal return (26 USC § 36B)

Closes #7748

Test plan

  • Added test case verifying non-filers get $0 PTC
  • Updated existing tests to explicitly set tax_unit_is_filer: true so each test validates its intended logic path
  • All 5 YAML tests pass

🤖 Generated with Claude Code

…lation

Non-filers cannot claim the ACA Premium Tax Credit (26 USC § 36B requires
filing Form 8962). Previously, aca_ptc computed nonzero values for non-filing
tax units, inflating aggregate PTC in calibrated datasets.

Closes PolicyEngine#7748

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Mar 11, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (752fae4) to head (c2c5457).
⚠️ Report is 40 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #7753   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            2         1    -1     
  Lines           13        18    +5     
=========================================
+ Hits            13        18    +5     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@baogorek
Copy link
Collaborator

Oh I'm so stuck here. Concerned about this:

  This is a circularity bug: is_filer depends on aca_ptc (via eligible_for_refundable_credits), and aca_ptc depends on county. The constraint evaluates is_filer at state level where aca_ptc = 0, so is_filer = False. But the actual county-level aca_ptc > 0 would make is_filer = True.

@baogorek
Copy link
Collaborator

Hi @juaristi22 — we've been working through a related issue in policyengine-us-data's calibration pipeline and concluded that the causal direction here should be reversed.

In reality, ACA marketplace enrollment (receiving APTC) creates a legal obligation to file (IRC § 36B reconciliation). So rather than gating aca_ptc on is_filer, we should make ACA enrollment imply filing.

PR #7782 adds takes_up_aca_if_eligible as an OR condition in tax_unit_is_filer, so ACA enrollees are always filers. This makes the * is_filer gate proposed here unnecessary — enrollees will always pass it.

See #7781 for the full discussion. Would love your thoughts on this approach.

@baogorek
Copy link
Collaborator

After further investigation, we believe the current behavior on main is correct — aca_ptc should NOT be gated on is_filer.

The ACA Premium Tax Credit is received as APTC (monthly premium reductions) at enrollment time, before any tax filing happens. Filing is required to reconcile, but the benefit flows regardless. Gating on is_filer would incorrectly zero out PTC for enrollees who received the benefit but haven't filed.

The takes_up_aca_if_eligible draw (67.2% rate from KFF data) already handles the participation question. Adding * is_filer would create a double filter with the wrong causal direction — filing doesn't gate the benefit, enrollment does.

Apologies for the earlier comment suggesting our PR #7782 as an alternative — we got confused ourselves and are closing that one too. See below.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

aca_ptc should return 0 for non-filers (produces 5x overestimate in calibrated datasets)

3 participants